home *** CD-ROM | disk | FTP | other *** search
/ Freelog Special Edition 10 / FreelogHS10.iso / Buzz / Buzz_Advanced_Pack.exe / {app} / Dev / CyanPhase Mono.cpp < prev    next >
C/C++ Source or Header  |  2001-08-27  |  5KB  |  215 lines

  1. #include "../mdk/mdk.h"
  2. #include <windows.h>
  3.  
  4. #pragma optimize ("awy", on) 
  5.  
  6. CMachineParameter const paraLeftGain =
  7. {
  8.     pt_byte,
  9.     "Gain-Left",
  10.     "Left Gain",
  11.     0,
  12.     0xFE,
  13.     0xFF,
  14.     MPF_STATE,
  15.     0xFE
  16. };
  17.  
  18. CMachineParameter const paraRightGain =
  19. {
  20.     pt_byte,
  21.     "Gain-Right",
  22.     "Right Gain",
  23.     0,
  24.     0xFE,
  25.     0xFF,
  26.     MPF_STATE,
  27.     0xFE
  28. };
  29.  
  30. CMachineParameter const *pParameters[] = { ¶LeftGain, ¶RightGain };
  31. CMachineAttribute const *pAttributes[] = { NULL };
  32.  
  33. #pragma pack(1)        
  34.  
  35. class gvals
  36. {
  37. public:
  38.     byte leftgain;
  39.     byte rightgain;
  40. };
  41.  
  42. #pragma pack()
  43.  
  44.  
  45. CMachineInfo const MacInfo = 
  46. {
  47.     MT_EFFECT,
  48.     MI_VERSION,    
  49.     MIF_DOES_INPUT_MIXING,
  50.     0,                                        // min tracks
  51.     0,                                        // max tracks
  52.     2,                                        // numGlobalParameters
  53.     0,                                        // numTrackParameters
  54.     pParameters,
  55.     0,
  56.     pAttributes,
  57.     "CyanPhase Mono",                                // name
  58.     "Mono",                                            // short name
  59.     "Edward L. Blake",                                // author
  60.     "&About..."
  61. };
  62.  
  63. class mi;
  64.  
  65. class miex : public CMDKMachineInterfaceEx 
  66. {
  67. public:
  68.     virtual void AddInput(char const *macname, bool stereo);    // called when input is added to a machine
  69.     virtual void DeleteInput(char const *macename);            
  70.     virtual void RenameInput(char const *macoldname, char const *macnewname); 
  71.     virtual void SetInputChannels(char const *macname, bool stereo); //{}
  72.     virtual void Input(float *psamples, int numsamples, float amp); // if MIX_DOES_INPUT_MIXING
  73.     virtual bool HandleInput(int index, int amp, int pan); //{ return false; }
  74. public:
  75.  
  76.     mi *pmi;
  77. };
  78.  
  79. class mi : public CMDKMachineInterface
  80. {
  81. public:
  82.     mi();
  83.     virtual ~mi();
  84.     virtual void Tick();
  85.     virtual void MDKInit(CMachineDataInput * const pi);
  86.     virtual bool MDKWork(float *psamples, int numsamples, int const mode);
  87.     virtual bool MDKWorkStereo(float *psamples, int numsamples, int const mode);
  88.     virtual void Command(int const i);
  89.     virtual void MDKSave(CMachineDataOutput * const po);
  90.     virtual char const *DescribeValue(int const param, int const value);
  91.  
  92. public:
  93.     virtual CMDKMachineInterfaceEx *GetEx() { return &ex; }
  94.     virtual void OutputModeChanged(bool stereo) {}
  95.     
  96.     float thearray[1024];
  97.     float leftgain, rightgain;
  98.  
  99. public:
  100.     miex ex;
  101.  
  102. public:
  103.  
  104.     gvals gval;
  105.  
  106. };
  107.  
  108. void miex::AddInput(char const *macname, bool stereo) { }
  109. void miex::DeleteInput(char const *macename) { }
  110. void miex::RenameInput(char const *macoldname, char const *macnewname) { }
  111. void miex::SetInputChannels(char const *macname, bool stereo) { }
  112. void miex::Input(float *psamples, int numsamples, float amp) {
  113.     int i;
  114.     for (i = 0; i < numsamples; i++) {
  115.         pmi->thearray[i] = pmi->thearray[i] + (((pmi->leftgain * *psamples++) + (pmi->rightgain * *psamples++)) / 2.0f) * amp;
  116.     }
  117. }
  118. bool miex::HandleInput(int index, int amp, int pan) { return false; }
  119.  
  120. mi::mi() {  GlobalVals = &gval; }
  121. mi::~mi() { }
  122.  
  123. void mi::MDKInit(CMachineDataInput * const pi)
  124. {
  125.     SetOutputMode( false );    //    If true, the MDKWork will never be called, meaning that Buzz will convert a mono signal to
  126.                             //    stereo itself and call MDKWorkStereo insted.
  127.                             //    If false, MDKWork will be called in mono cases, and the output should be mono
  128.     ex.pmi = this;
  129.     leftgain = 1.0f;
  130.     rightgain = 1.0f;
  131. }
  132.  
  133. void mi::MDKSave(CMachineDataOutput * const po) { }
  134.  
  135. void mi::Tick() {
  136.     if (gval.leftgain != 0xFF) {
  137.         leftgain = (gval.leftgain / 254.0f);
  138.     };
  139.     if (gval.rightgain != 0xFF) {
  140.         rightgain = (gval.rightgain / 254.0f);
  141.     };
  142. }
  143.  
  144. bool mi::MDKWork(float *psamples, int numsamples, int const mode)
  145. {
  146.     if (mode==WM_WRITE)
  147.         return false;
  148.     if (mode==WM_NOIO)
  149.         return false;
  150.     if (mode==WM_READ)        // <thru>
  151.         return true;
  152.  
  153.     int i;
  154.     for (i = 0; i < numsamples; i++) {
  155.         *psamples++ = thearray[i];
  156.         thearray[i] = 0.0f;
  157.     }
  158.  
  159.     return true;
  160. }
  161.  
  162. bool mi::MDKWorkStereo(float *psamples, int numsamples, int const mode)
  163. {
  164.     if (mode==WM_WRITE)
  165.         return false;
  166.     if (mode==WM_NOIO)
  167.         return false;
  168.     if (mode==WM_READ)        // <thru>
  169.         return true;
  170.  
  171.     int i;
  172.     for (i = 0; i < numsamples; i++) {
  173.         *psamples++ = thearray[i];
  174.         *psamples++ = thearray[i];
  175.         thearray[i] = 0.0f;
  176.     }
  177.  
  178.     return true;
  179. }
  180.  
  181. void mi::Command(int const i)
  182. {
  183.     switch (i)
  184.     {
  185.     case 0:
  186.         MessageBox(NULL,"CyanPhase Mono 1.0\n\nCopyright 2000 Edward L. Blake\nEmail: blakee@rovoscape.com\n\nPretty damn easy machine that makes stereo go into mono conveniently","About CyanPhase Mono",MB_OK|MB_SYSTEMMODAL);
  187.         break;
  188.     default:
  189.         break;
  190.     }
  191. }
  192. char const *mi::DescribeValue(int const param, int const value)
  193. {
  194.     static char txt[16];
  195.     switch(param)
  196.     {
  197.     case 0:
  198.         sprintf(txt,"%.1f%%", value/254.0f*100.0f );
  199.         return txt;
  200.         break;
  201.     case 1:
  202.         sprintf(txt,"%.1f%%", value/254.0f*100.0f );
  203.         return txt;
  204.         break;
  205.  
  206.     default:
  207.         return NULL;
  208.     }
  209. }
  210.  
  211. #pragma optimize ("", on) 
  212.  
  213. DLL_EXPORTS
  214.  
  215.